package org.address;

import org.junit.Test;

/**
 * ClassName: calc_v1
 * Package: org.address &#x7ECF;&#x7EAC;&#x5EA6;&#x7684;&#x8BA1;&#x7B97;
 * Description:
 *
 * @Author BuTang
 * @Create 2023/11/23 15:08
 * @Version 1.0
 */
public class ConstantCalculation {


    /**
     * 从上到下分别为
     * 地球半径
     * 每一圈镜子之间的间隔随着远离吸热塔，增加间隔
     * 第一圈镜子到吸热塔的距离
     * 吸热塔的经度
     * 吸热塔的纬度
     */
    private static final double EARTH_RADIUS = 6378137;
    private static final double MIRROR_MIRROR_INTERVAL = 0.04;
    private static final double MIRROR_TOWER_INTERVAL = 60;
    private static final double TOWER_LONGITUDE = 94.252903;
    private static final double TOWER_LATITUDE = 40.034251;

    /**
     * 根据经纬度，计算两点间的距离
     *
     * @param longitude1 第一个点的经度
     * @param latitude1  第一个点的纬度
     * @param longitude2 第二个点的经度
     * @param latitude2  第二个点的纬度
     * @return 返回距离，单位m
     */
    public static double getDistance1(double longitude1, double latitude1, double longitude2, double latitude2) {
        // 纬度
        double lat1 = Math.toRadians(latitude1);
        double lat2 = Math.toRadians(latitude2);
        // 经度
        double lng1 = Math.toRadians(longitude1);
        double lng2 = Math.toRadians(longitude2);
        // 纬度之差
        double a = lat1 - lat2;
        // 经度之差
        double b = lng1 - lng2;
        // 计算两点距离的公式
        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
                Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(b / 2), 2)));
        // 弧长乘地球半径, 返回单位: 米
        s =  s * EARTH_RADIUS;
        return s;
    }
    public static void main(String[] args) {
        // 第一个点的纬度,经度
        double lat1 = 40.034295;
        double lon1 = 94.252364;
        // 第二个点的纬度,经度
        double lat2 = 40.034295;
        double lon2 = 94.252303;

        double distance1 = getDistance1(lat1, lon1, lat2, lon2);
        System.out.println("两点之间的距离为：" + distance1);

        // 第三个点的纬度,经度
        double lat3 = 40.034103;
        double lon3 = 94.245402;
        // 第四个点的纬度,经度
        double lat4 = 40.034103;
        double  lon4 = 94.245317;

        double distance2 = getDistance1(lat3, lon3, lat4, lon4);
        System.out.println("两点之间的距离为：" + distance2);


        // 第五个点的纬度,经度
        double lat5 = 40.034251;
        double lon5 = 94.252903;
        double distance3 = getDistance1(lat1, lon1, lat5, lon5);
        System.out.println("第一圈镜子与吸热塔之间的距离为：" + distance3);


        System.out.println("每一圈镜子之间的间隔随着远离吸热塔，增加 " + ((distance2 - distance1) / 67) +" m");

    }

    @Test
    public void test1(){
        int n = 0 ;
        int sum = 46 ;

        while ( sum < 12000 ){
            n++;
            sum += 46 + 4 * n ;
        }
        System.out.println( "镜子圈数量为："+n + " 镜子数量为：" + sum);
    }



}
